public class Solution2172 {
    public int maximumANDSum(int[] nums, int numSlots) {
        int num=1;
        for (int i=0;i<numSlots;i++){
            num=num*3;
        }
        int[][] f=new int[20][num+10];
        for (int i=1;i<=nums.length;i++){
            for (int j=0;j<=num;j++){
                for (int k=1;k<=numSlots;k++){
                    if (check(j,k)!=0){
                        int t=get(j,k);
                        f[i][j]=Math.max(f[i][j],f[i-1][t]+(nums[i-1]&k));
                    }
                }
            }
        }
        int ans=0;
        for (int i=0;i<=num;i++){
            ans=Math.max(f[nums.length][i],ans);
        }
        return ans;
    }

    int check(int m,int k){
        for (int i=1;i<k;i++){
            m=m/3;
        }
        return m%3;
    }

    int get(int m,int k){
        int temp=1;
        for (int i=1;i<k;i++){
            temp=temp*3;
        }
        return m-temp;
    }

    public static void main(String[] args) {
        System.out.println(new Solution2172().maximumANDSum(new int[]{1,2,3,4,5,6},3));
    }
}
